<?php

class Secure {
  /**
   * Secure::getTxt()
   *
   * @param mixed $var
   * @return
   */
  public static function getTxt($var) {
    if (!isset($GLOBALS['_GET'][$var])) return null;
    $str = htmlspecialchars(html_entity_decode($GLOBALS['_GET'][$var]), ENT_QUOTES);
    $str = Rewrite::mbStrReplace($str, '€', "&euro;");
    return $str;
  }

  /**
   * Secure::getTabTxt()
   *
   * @param mixed $var
   * @return
   */
  public static function getTabTxt($var) {
    if (!isset($GLOBALS['_GET'][$var])) return array();
    $tableau = $GLOBALS['_GET'][$var];
    if (count($tableau) > 0) {
      foreach ($tableau as $index => $valeur) {
        $str = htmlspecialchars(html_entity_decode($valeur), ENT_QUOTES);
        $str = Rewrite::mbStrReplace($str, '€', "&euro;");
        $tableau[$index] = $str;
      }
    }
    return $tableau;
  }

  /**
   * Secure::postTxt()
   *
   * @param mixed $var
   * @return
   */
  public static function postTxt($var) {
    if (!isset($GLOBALS['_POST'][$var])) return null;
    $str = htmlspecialchars(html_entity_decode($GLOBALS['_POST'][$var]), ENT_QUOTES);
    $str = Rewrite::mbStrReplace($str, '€', "&euro;");
    return $str;
  }

  /**
   * Secure::postTabTxt()
   *
   * @param mixed $var
   * @return
   */
  public static function postTabTxt($var) {
    //$tab = array("&euro;" => "€");
    if (!isset($GLOBALS['_POST'][$var])) return array();
    $tableau = $GLOBALS['_POST'][$var];
    if (count($tableau) > 0) {
      foreach ($tableau as $index => $valeur) {
        $str = htmlspecialchars(html_entity_decode($valeur), ENT_QUOTES);
        $str = Rewrite::mbStrReplace($str, '€', "&euro;");
        $tableau[$index] = $str;
      }
    }
    return $tableau;
  }

  /**
   * Secure::dataSql()
   *
   * @param mixed $data
   * @param object $link
   * @return
   */
  public static function dataSql($var) {
    $var = htmlspecialchars_decode($var, ENT_QUOTES);
    return $var;
  }

  /**
   * Secure::requires()
   *
   * @param mixed $lien
   * @return
   */
  public static function includeVerif($lien) {
    if (file_exists($lien)) {
      return $lien;
    }
    else {
      throw new Exception("Le fichier $lien n'existe pas");
    }
  }

  /**
   * Génération d'une clef ou d'un mot de passe
   *
   * @param   int     $minLen     Longueur minimum de la chaine retournée
   * @param   int     $maxLen     Longueur maximum de la chaine retournée
   * @param   string  $type       Type de chaine retournée (lower/upper/numeric/alpha/alnum)
   *
   * @return  string  Chaine générée au hasard en fonction des critères
   *
   * Inspiré d'un exemple trouvé sur php.net
   */
  public static function generateKey($minLen=12, $maxLen=32, $type='alnum') {
    // Caractères alphabétiques minuscules
    $loAlpha = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

    // Caractères alphabétiques majuscules
    $upAlpha = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');

    // Caractères numériques
    $num = array('1','2','3','4','5','6','7','8','9','0');

    $keyVals = array();
    $key = array();

    // Sélection des tableaux à utiliser
    switch ($type) {
      case 'lower' :
        $keyVals = $loAlpha;
        break;

      case 'upper' :
        $keyVals = $upAlpha;
        break;

      case 'numeric' :
        $keyVals = $num;
        break;

      case 'alpha' :
        $keyVals = array_merge($loAlpha, $upAlpha);
        break;

      case 'alnum' :
        $keyVals = array_merge($loAlpha, $upAlpha, $num);
        break;
    }

    // Longueur pour cette chaine
    $len = rand($minLen, $maxLen);

    // Boucle en fonction de la longueur de la chaine
    for($i = 0; $i <= $len-1; $i++) {
      $r = rand(0,count($keyVals)-1);
      $key[$i] = $keyVals[$r];
    }

    // Assemblage des éléments dans une string
    return join("", $key);
  }


  /**
   * Secure::data()
   *
   * @param mixed $var
   * @return
   */
  public static function data($data) {
    return htmlspecialchars(html_entity_decode($data), ENT_QUOTES);
  }

}

?>